package com.christina.engine.response.model;

import lombok.Builder;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;

/**
 * 响应结果模型
 * 包含生成的响应内容和相关元数据
 * 
 * @author Christina
 */
@Data
@Builder
public class ResponseResult {
    
    /**
     * 响应内容
     */
    private String content;
    
    /**
     * 响应类型
     */
    private String responseType;
    
    /**
     * 是否成功生成
     */
    private boolean success;
    
    /**
     * 错误信息
     */
    private String errorMessage;
    
    /**
     * 生成时间
     */
    private LocalDateTime generatedTime;
    
    /**
     * 生成耗时（毫秒）
     */
    private long generationDurationMs;
    
    /**
     * 生成器名称
     */
    private String generatorName;
    
    /**
     * 响应质量分数
     */
    private double qualityScore;
    
    /**
     * 元数据
     */
    @Builder.Default
    private Map<String, Object> metadata = new HashMap<>();
    
    /**
     * 添加元数据
     * 
     * @param key 键
     * @param value 值
     */
    public void addMetadata(String key, Object value) {
        if (metadata == null) {
            metadata = new HashMap<>();
        }
        metadata.put(key, value);
    }
    
    /**
     * 获取元数据
     * 
     * @param key 键
     * @param type 值类型
     * @return 值
     */
    @SuppressWarnings("unchecked")
    public <T> T getMetadata(String key, Class<T> type) {
        if (metadata == null) {
            return null;
        }
        
        Object value = metadata.get(key);
        if (value == null) {
            return null;
        }
        
        if (type.isInstance(value)) {
            return (T) value;
        }
        
        return null;
    }
    
    /**
     * 创建成功的响应结果
     * 
     * @param content 响应内容
     * @param generatorName 生成器名称
     * @return 响应结果
     */
    public static ResponseResult success(String content, String generatorName) {
        return ResponseResult.builder()
                .content(content)
                .success(true)
                .generatedTime(LocalDateTime.now())
                .generatorName(generatorName)
                .qualityScore(0.8) // 默认质量分数
                .build();
    }
    
    /**
     * 创建失败的响应结果
     * 
     * @param errorMessage 错误信息
     * @param generatorName 生成器名称
     * @return 响应结果
     */
    public static ResponseResult failure(String errorMessage, String generatorName) {
        return ResponseResult.builder()
                .success(false)
                .errorMessage(errorMessage)
                .generatedTime(LocalDateTime.now())
                .generatorName(generatorName)
                .qualityScore(0.0)
                .build();
    }
}